5.03. ООП в Java
Принципы ООП в Java
Java – язык ООП, организованный вокруг объектов, а не только функций и логики.
Инкапсуляция
★ Инкапсуляция скрывает внутреннюю реализацию объекта и предоставляет контролируемый доступ через методы – геттеры и сеттеры:
public class Person {
private String name; // приватное поле
public String getName() { // геттер
return name;
}
public void setName(String name) { // сеттер
this.name = name;
}
}
Внешний код может взаимодействовать с name только через методы getName() и setName().
Инкапсуляция — это механизм объединения данных (переменных) и методов, работающих с этими данными, в одном классе, с ограничением прямого доступа к внутренним компонентам объекта. В Java инкапсуляция достигается с помощью модификаторов доступа (private, protected, public), а также через предоставление публичных методов для чтения и изменения значений полей.
Наследование
★ Наследование – один класс (потомок/подкласс) может наследовать поля и методы другого класса (предка/суперкласса):
class Animal {
void makeSound() {
System.out.println("Какой-то звук");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Гав!");
}
}
Dog имеет доступ ко всем public и protected членам Animal, и наследуется через ключевое слово extends, а @Override – это переопределение метода makeSound(), который уточняет, что за звук издаст собака.
Наследование — это механизм ООП, позволяющий создавать новый класс на основе уже существующего. Новый класс (подкласс) получает все свойства и методы родительского класса (суперкласса), что обеспечивает повторное использование кода и упрощает поддержку.
Наследование реализуется с помощью ключевого слова extends. Подкласс может расширять или переопределять поведение суперкласса, а также добавлять новые поля и методы. Важно помнить, что в Java класс может наследоваться только от одного суперкласса.
Полиморфизм
★ Полиморфизм – объект может принимать много форм, и один интерфейс может использоваться для представления разных типов:
Animal myPet = new Dog();
myPet.makeSound(); // Гав!
myPet – это класс Animal, но ссылается на объект типа Dog – это динамический полиморфизм.
Абстракция
★ Абстракция – скрывает сложную реализацию и предоставляет простой интерфейс:
abstract class Vehicle {
abstract void startEngine();
}
class Car extends Vehicle {
void startEngine() {
System.out.println("Двигатель машины заведён!");
}
}
Класс Vehicle абстрагирует детали запуска двигателя, оставляя подклассам реализацию.
Абстракция — это принцип ООП, который позволяет выделять в программе только значимые характеристики объекта, скрывая внутренние детали реализации. В Java абстракция достигается через абстрактные классы и интерфейсы.
Абстрактный класс может содержать как реализованные, так и абстрактные (без реализации) методы, задавая общий шаблон для подклассов. Интерфейс определяет набор методов, которые класс обязан реализовать.
Абстракция упрощает взаимодействие с объектами, повышает гибкость и снижает связанность кода, концентрируя внимание на "что делает" объект, а не "как он это делает".